﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace MP3_TAG_EDIT
{
    public partial class frmMP3_TAG_EDIT : Form {     

        

        private ArrayList _listaFile = new ArrayList();

        public frmMP3_TAG_EDIT() {
            InitializeComponent();
        }


       //SELEZIONE CARTELLA MP3
        private void btnSelezioneCartellaMP3_Click(object sender, EventArgs e) {
            
            //impostazione proprietà
            folderBrowserDialog1.ShowNewFolderButton = false;
            folderBrowserDialog1.RootFolder = Environment.SpecialFolder.Desktop;
            
            //apertura finestra per visualizzare il BROWSER delle CARTELLE
            folderBrowserDialog1.ShowDialog();
        
            //scrittura path selezionato nella casella di testo
            txtCartellaMP3.Text = folderBrowserDialog1.SelectedPath;

            //abilitazione (eventuale) pulsante AVVIA e visualizzazione numero files da PROCESSARE
            if (!folderBrowserDialog1.SelectedPath.Trim().Equals("")) {

                DirectoryInfo directoryInfo = new DirectoryInfo(folderBrowserDialog1.SelectedPath);
                FileInfo[] fileInfoTemp = directoryInfo.GetFiles("*.*", SearchOption.AllDirectories);

                //elimina dall'elenco i files NON in possesso dell'estensione richiesta
                _listaFile.Clear();
                foreach (FileInfo fileInfo in fileInfoTemp) {
                    if (fileInfo.Extension.Equals(".mp3", StringComparison.CurrentCultureIgnoreCase) ||
                        fileInfo.Extension.Equals(".m4a", StringComparison.CurrentCultureIgnoreCase) ||
                        fileInfo.Extension.Equals(".m4p", StringComparison.CurrentCultureIgnoreCase)) {
                        _listaFile.Add(fileInfo);
                    }
                }

                if (_listaFile.Count > 0) btnAvvia.Enabled = true;
                else btnAvvia.Enabled = false; ; 

                lblNumeroFiles.Text = String.Format("Numero files processati: 0 / {0}",
                                                     _listaFile.Count.ToString());
            }
        
        }

        
        //GESTIONE EVENTO "AVVIA" ELABORAZIONE
        private void btnAvvia_Click(object sender, EventArgs e) {
            if (MessageBox.Show("AVVIARE LA MODIFICA DEI TAGS MP3?", "CONFERMA", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                Elabora();
        }


        //ELABORAZIONE MODIFICHE AI TAGS
        private void Elabora() {

            //impostazione valori progress Bar
            progressBar1.Value = 0;
            progressBar1.Minimum = 0;
            progressBar1.Maximum = _listaFile.Count;
            

            //scorre l'elenco dei files
            foreach (FileInfo fileInfo in _listaFile) {

                //ottiene un riferimento al file MP3 come "tag"
                TagLib.File MP3File = TagLib.File.Create(fileInfo.FullName);

                //recupera i "vecchi" tag
                String oldTitle = MP3File.Tag.Title;
                uint trackId = MP3File.Tag.Track;

                //imposta i nuovi tag
                String newTitle = trackId.ToString().PadLeft(2, '0') + "." + oldTitle;
                MP3File.Tag.Title = newTitle;

                //salvataggio
                MP3File.Save();

                //aggiornamento barra di avanzamento
                progressBar1.Value++;
                lblNumeroFiles.Text = String.Format("Numero files processati: {0} / {1}", 
                                                    progressBar1.Value.ToString(),
                                                    _listaFile.Count.ToString());
                Application.DoEvents();
            }
        }
    
    
    
    }
}
